[C] Qsort - Ordenação
Publicado por Enzo de Brito Ferber (última atualização em 09/10/2010)
[ Hits: 6.495 ]
Homepage: http://www.maximasonorizacao.com.br
Programa simples para mostrar uma das funções de ordenação da biblioteca padrão. Bem legalzinho, bom pra não perder tempo escrevendo sua própria função se você pode usar algo mais generalizado.
/* qsort.c */
/* Enzo Ferber : <enzo@veloxmail.com.br>
*
* Quick Sort Routine Example
* sep 2010
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
/* compare function for quick sort */
int compare ( const void *va, const void *vb )
{
int *a = (int *) va;
int *b = (int *) vb;
return (*a > *b) ? 1 : ( *a == *b ) ? 0 : -1 ;
}
int *buildarray ( void )
{
/* information */
int *p, i = 1, n;
p = ( int * ) malloc ( 2 * sizeof ( int ));
if ( !p )
{
perror ( "[*] malloc" );
return NULL;
}
while ( 1 )
{
printf ( "Value[%3d]: ", i ); __fpurge ( stdin );
scanf ( "%d", &n );
/* first element will be the number of elements on the array
* this will be used by qsort()
*/
if ( n < 0 )
{
/* first element */
*p = i - 1;
return p;
}
else *(p + i) = n;
/* alloc memory for the next item */
p = ( int * ) realloc ( p, (i + 2) * sizeof(int));
if ( !p )
{
perror ( "[*] realloc" );
return NULL;
}
/* increment */
++i;
}
return p;
}
int main ( void )
{
int *a = buildarray();
int *p, n, i;
n = *(a + 0);
p = a + 1;
/* Explanation:
*
* 'a' after buildarray return is:
*
* 'a'pos: 0 1 2 3 n
* [number_of_elements][data][data1][data2][dataN]....
*
* Value: n x x x x
*
* So, 'n' is the number of elements in the array, and 'x'
* is the data entered by the user. Pretty easy huh?
*
* So now, we do:
*
* p = a[1]
* n = a[0]
* Therefore,
*
* p[0] = a[1];
* n = n; (local_n) = (n_in_number_of_elements)
*
* P now is an array with only data entered by the user
*/
/* now we organize the array in ascending order */
printf ( "Sorting...\n" );
qsort ( (void *)p, n, sizeof(int), compare );
printf ( "Array: " );
for ( i = 0; i < n; i++ ) printf ( "%d ", p[i] );
printf ( "\n" );
/* free() the memory */
free ( a );
/* return to SO */
return 0;
}
Jogando dados e somando os valores
Calculadora em C separada por funções e com diretivas
Nenhum comentário foi encontrado.
Como Ativar a Aceleração por GPU (ROCm) no Ollama para AMD Navi 10 (RX 5700 XT / 5600) no Gentoo
Como criar um make.conf no Gentoo (para iniciantes)
Como instalar o Open WebUI para Ollama no Gentoo (com systemd)
INSTALAR (e jogar) COUNTER STRIKE 1.6 (install cs 1.6) NO LINUX
Removendo o bloqueio por erros de senha no Gentoo (systemd)
Papel de Parede Animado no KDE Plasma 6 (Com dicas para Gentoo)
Homebrew: o gerenciador de pacotes que faltava para o Linux!
Removendo a trava de versão do Project Brutality para GZDoom/UZDoom
Acelere a compilação no Gentoo com distcc (guia para Systemd)
Teste de CHAT para o futuro ? (0)
Ajudante para criar dicas e artigos no VOL (29)
ATUALIZAÇÃO DO KERNEL LINUX (2)
[Matemática] o que seria algo mais poderoso do que uma função? [RESOLV... (5)









